/* 
 * PosicaoGPS.java
 * 
 * Data de criação: 06/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Embeddable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

/**
 * Classe responsável por representar o posicionamento de uma {@link Area} no
 * globo terrestre. Compreende os pontos Longitude, Latitude e Altitude.
 * 
 * @author Osvaldeir
 * @since 06/09/2010
 * 
 */
@Embeddable
public class PosicaoGPS implements Serializable {

	private static final long serialVersionUID = 1L;

	private Grau longitude;

	private Grau latitude;

	private Grau altitude;

	/**
	 * Retorna o(a) longitude.
	 * 
	 * @return Grau
	 */
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "LONGITUDEID", nullable = true)
	public Grau getLongitude() {
		return longitude;
	}

	/**
	 * Atribui o(a) longitude.
	 * 
	 * @param longitude
	 *            Grau
	 */
	public void setLongitude(Grau longitude) {
		this.longitude = longitude;
	}

	/**
	 * Retorna o(a) latitude.
	 * 
	 * @return Grau
	 */
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "LATITUDEID", nullable = true)
	public Grau getLatitude() {
		return latitude;
	}

	/**
	 * Atribui o(a) latitude.
	 * 
	 * @param latitude
	 *            Grau
	 */
	public void setLatitude(Grau latitude) {
		this.latitude = latitude;
	}

	/**
	 * Retorna o(a) altitude.
	 * 
	 * @return Grau
	 */
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "ALTITUDEID", nullable = true)
	public Grau getAltitude() {
		return altitude;
	}

	/**
	 * Atribui o(a) altitude.
	 * 
	 * @param altitude
	 *            Grau
	 */
	public void setAltitude(Grau altitude) {
		this.altitude = altitude;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((altitude == null) ? 0 : altitude.hashCode());
		result = prime * result
				+ ((latitude == null) ? 0 : latitude.hashCode());
		result = prime * result
				+ ((longitude == null) ? 0 : longitude.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PosicaoGPS other = (PosicaoGPS) obj;
		if (altitude == null) {
			if (other.altitude != null)
				return false;
		} else if (!altitude.equals(other.altitude))
			return false;
		if (latitude == null) {
			if (other.latitude != null)
				return false;
		} else if (!latitude.equals(other.latitude))
			return false;
		if (longitude == null) {
			if (other.longitude != null)
				return false;
		} else if (!longitude.equals(other.longitude))
			return false;
		return true;
	}

}
